﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Empresa.Sistema.Aplicacion;
using Empresa.Sistema.Datos.Entidades;

namespace Empresa.Sistema.Presentacion
{
    public partial class regPrestamos : Form
    {
        public regPrestamos()
        {
            InitializeComponent();
        }

        Prestamo pre = null;
        private string accion = string.Empty;

        public string buscar;

        List<Detalle_Prestamo> lista = new List<Detalle_Prestamo>();
        List<Detalle_Prestamo> lista_anulados = new List<Detalle_Prestamo>();
        

        public ItemLibro itemLibro = new ItemLibro();
        
        private void regPrestamos_Load(object sender, EventArgs e)
        {
            accion = ((mntPrestamos)this.Owner).accion;
            pre = ((mntPrestamos)this.Owner).pre;
            if (accion == "modificar" || accion == "eliminar")
            {
                CargaInfoControles();
                if (accion == "eliminar")
                {
                    DesactivarControles();
                }
            }
        }

        private void CargaInfoControles()
        {
            //Cabecera
            txtCodigo.Text = pre.Codigo;
            txtEstado.Text = pre.Estado;
            dtpFecha.Text = pre.Fecha.ToString();
            txtPersona.Text = pre.Persona.ToString();
            txtUsuario.Text = pre.Usuario.ToString();
           
            //Detalle
            lista = new Detalle_Prestamos().ConsultaPorID(pre.Id);
            

            float TotalLibros = 0;
            
            foreach (var elem in lista)
            {
                TotalLibros += elem.Cantidad;
            }
            txtTotalLibros.Text = TotalLibros.ToString();

            dgvDetallePrestamo.AutoGenerateColumns = false;
            dgvDetallePrestamo.DataSource = lista;
           
        }

        private void DesactivarControles()
        {
            txtCodigo.Enabled = false;
            txtEstado.Enabled = false;
            dtpFecha.Enabled = false;
            txtPersona.Enabled = false;
            txtUsuario.Enabled = false;
        }

        private void CargaInfoEntidad()
        {
            pre.Codigo = txtCodigo.Text;
            pre.Estado = txtEstado.Text;
            pre.Fecha = dtpFecha.Value;
            pre.Persona = Convert.ToInt32(txtPersona.Text);
            pre.Usuario = Convert.ToInt32(txtUsuario.Text);          
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            CargaInfoEntidad();
            if (accion == "adicionar")
            {
                new Transaccion_Prestamos().Adicionar(pre, lista);
                MessageBox.Show("adicionar");
            }
            else if (accion == "modificar")
            {
                if (lista_anulados.Count >= 0)
                {
                    foreach (var item in lista_anulados)
                    {
                        lista.Add(item);
                    }
                }
                new Transaccion_Prestamos().Modificar(pre, lista);
                MessageBox.Show("modificar");

            }
            else
            {
                DialogResult dialog = MessageBox.Show("¿Esta seguro de eliminar el registro?", "Alerta", MessageBoxButtons.YesNo);
                if (dialog == DialogResult.Yes)
                {
                    new Transaccion_Prestamos().Eliminar(pre, lista);
                }
                else
                {
                    MessageBox.Show("Operacion Cancelada");
                }
            }
            this.Close();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void dgvDetallePrestamo_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
        {
            e.Row.Cells["IdPrestamo"].Value = pre.Id;
        }

        int valid;
        private void btnAdicionar_Click(object sender, EventArgs e)
        {
            try
            {
                int lib1 = itemLibro.IdLibro;
                int can2 = Convert.ToInt32(txtCantidad.Text);      

                if (txtCantidad.Text != "")
                    valid = new Prestamos().CheckDisponibilidad(lib1, can2);
                else
                    MessageBox.Show("Ingrese Cantidad.");

                if (valid >= 0)
                {
                    // Cargamos valores a entidad Detalle_Compra
                    Detalle_Prestamo item = new Detalle_Prestamo();

                    if (accion == "modificar")
                        item.IdPrestamo = pre.Id;

                    item.EstadoMantenimiento = 1;
                    item.IdLibro = itemLibro.IdLibro;
                    item.Cantidad = Convert.ToInt32(txtCantidad.Text);
                    item.FechaDevolucion = dtpFechaDevolucion.Value;


                    // Asociamos Lista Generica a Grilla
                    lista.Add(item);
                    dgvDetallePrestamo.DataSource = null;
                    dgvDetallePrestamo.AutoGenerateColumns = false;
                    dgvDetallePrestamo.DataSource = lista;

                    itemLibro = new ItemLibro();
                    txtLibro.Text = string.Empty;
                    txtCantidad.Text = "0";
                    dtpFechaDevolucion.Text = string.Empty;
                }
                else 
                {
                    //MessageBox.Show("Cantidad disponible: {0}", valid.ToString);
                    MessageBox.Show(String.Format("Libros disponibles: {0}", Convert.ToString(can2 + valid)), "Alerta !!!", MessageBoxButtons.OK);
                }
               
                    

            }
            catch (Exception ex)
            {


            }
            
            
            
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (dgvDetallePrestamo.SelectedRows.Count > 0)
            {
                DialogResult respuesta = MessageBox.Show("Desea Eliminar?", "Elimina Detalle", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                if (respuesta == System.Windows.Forms.DialogResult.Yes)
                {
                    // Implementamos la eliminacion

                    lista[dgvDetallePrestamo.SelectedRows[0].Index].EstadoMantenimiento = 3;

                    double TotalLibros = Convert.ToDouble(txtTotalLibros.Text);
                    TotalLibros -= lista[dgvDetallePrestamo.SelectedRows[0].Index].Cantidad;
                    txtTotalLibros.Text = TotalLibros.ToString();

                    lista_anulados.Add(lista[dgvDetallePrestamo.SelectedRows[0].Index]);
                    lista.RemoveAt(dgvDetallePrestamo.SelectedRows[0].Index);

                    dgvDetallePrestamo.DataSource = null;
                    dgvDetallePrestamo.DataSource = lista;

                }
            }
        }

        public class ItemLibro
        {
            public int IdLibro { get; set; }
            public string Nombre { get; set; }            
        }
            

        private void btnLibro_Click(object sender, EventArgs e)
        {
            buscar = "libro";
            var buscarLibros = new mntLibros();
            buscarLibros.Owner = this;
            buscarLibros.ShowDialog();
            
            txtLibro.Text = itemLibro.Nombre;
           
        }

        private void txtCantidad_TextChanged(object sender, EventArgs e)
        {

        }



    }
}
